GitHub Actionsからnotion-sdk-pyを用いてNotion上にリリースノートを自動出力してみた
リリースノートの自動出力先をNotionにしたい場合、手っ取り早いのはGitHub上で整形したリリースノート用出力をそのままNotion APIに渡すことです。GitHub Actionsにはリリースノートの整形出力用Actionが存在しており、幾つかの設定を追加するだけで手作業いらずとなります。
ramnes/notion-sdk-pyとrelease-drafter/release-drafterを組み合わせて、リリースノートを出力する際にNotion更新も試してみました。
ramnes/notion-sdk-pyについては以前書いた記事を参考にしてください。
Workflowを組む
release-drafter実行後のoutputをnotion-sdk-pyからAPIに送る本文に加えるだけです。
# This is a basic workflow to help you get started with Actions name: publish-release defaults: run: shell: bash # Controls when the workflow will run on: # Triggers the workflow on push or pull request events but only for the "master" branch push: branches: [ "master" ] pull_request: branches: [ "master" ] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: # This workflow contains a single job called "build" build: # The type of runner that the job will run on runs-on: ubuntu-latest # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v3 - name: update release id: release_drafter uses: release-drafter/release-drafter@v5 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.9' - name: Run publish-draft run: | sudo -H pip install -U pipenv PYTHON_BIN_PATH="$(python3 -m site --user-base)/bin" PATH="$PATH:$PYTHON_BIN_PATH" pipenv sync pipenv run python publish-draft.py working-directory: ./notion env: NOTION_TOKEN: ${{ secrets.NOTION_TOKEN }} DUMP_BODY: ${{ steps.release_drafter.outputs.body }}
publish-draft.py
import os from notion_client import Client from pprint import pprint notion = Client(auth=os.environ["NOTION_TOKEN"]) result = notion.blocks.children.append('XXXXXXXXXXXXXXXXXXXXXXXXX', children=[ { "object": "block", "type": "code", "code": { "rich_text": [{ "type": "text", "text": { "content": os.environ['DUMP_BODY'] } }], "language": "plain text" }, }] ) pprint(result)
リリースノート部分が識別しやすくなるようにcodeブロックを指定しています。必要に応じてlanguageの指定を変えるとよいでしょう。
注意点
幾つかパターンを変えつつ行ってみたところ、API仕様による制約がありました
- API仕様制約により常にブロック最下段への追加となる
- 既存ブロックの単純移動は不可能
文章だと分かりづらいので実例を上げると、下図1のような構成にてTestとコードブロックの間に新しくコードブロック挟もうとすると下図2のようになります。
図1
図2
Testの小ページ扱いにて間への挟み込みとはなりません。常に小ページの最下に追加される新規ブロックとして扱われるということです。
あとがき
意外と手軽にできました。ネックがあるとすれば、リリースノートで最新を常に最上段に上げたい場合はDBにて各リリースノートを個別レコード扱いにする必要があります。追加日付で並べるわけです。
NotionAPIがブロックの間への挟み込みに対応してくれればリリースノートで最新順に並べて追加することも可能になります。今後に期待しましょう。